/**
 * Description: StudentService.java
 * Copyright (c) 2008-2009  Neo. 
 * All Rights Reserved.
 * @version 1.0  Mar 24, 2009 2:38:54 PM 李萌（neolimeng@gmail.com）created
 */
package org.paradise.dms.services;

import java.util.Date;
import java.util.HashSet;
import java.util.List;

import org.paradise.dms.pojo.CollegeInfo;
import org.paradise.dms.pojo.MajorInfo;
import org.paradise.dms.pojo.Student;
import org.springframework.stereotype.Service;

import com.dheaven.framework.dao.DaoException;

/**
 * Description: Copyright (c) 2008-2009 Neo. All Rights Reserved.
 * 
 * @version 1.0 Mar 24, 2009 2:38:54 PM 李萌（neolimeng@gmail.com）created
 */
@Service
public interface StudentService {
	/**
	 * 
	 * Description: 插入一条学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 2:59:46 PM 李萌（neolimeng@gmail.com）创建
	 * @param student
	 * @return
	 */
	public boolean insertStudent(Student student);
	
	/**
	 * 批量插入学生信息
	 * @param list
	 * @return
	 */
	public int batchInsert(List<Student> list);
	
	/**
	 * 取得所有学生的学号
	 */
	public HashSet<String> getStudentNo();

	/**
	 * 
	 * Description: 更新一条学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 3:00:16 PM 李萌（neolimeng@gmail.com）创建
	 * @param student
	 * @return
	 */
	public boolean updateStudent(Student student);

	/**
	 * 
	 * Description: 删除一条学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 3:00:41 PM 李萌（neolimeng@gmail.com）创建
	 * @param studentid
	 * @return
	 */
	public boolean deleteStudent(int studentid);

	/**
	 * 
	 * Description: 根据学生ID取得一条学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 3:01:16 PM 李萌（neolimeng@gmail.com）创建
	 * @param studentid
	 * @return
	 */
	public Student getStudent(int studentid);

	/**
	 * 
	 * Description: 取得所有学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 3:03:04 PM 李萌（neolimeng@gmail.com）创建
	 * @return
	 */
	public List<Student> getAllStudentPerPage(int pageSize, int startRow);

	/**
	 * 
	 * Description:根據學生學號分頁查詢學生
	 * 
	 * @Version1.0 Apr 11, 2009 1:17:07 PM 李双江（paradise.lsj@gmail.com）创建
	 * @param studentno
	 * @param pageSize
	 * @param startRow
	 * @return
	 */

	public List<Student> getAllStudentPerPageByStudentNo(String[] studentno, int pageSize, int startRow);
	/**
	 * 
	 * Description:根據學生id查詢學生
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Student> getAllStudentByStudentId(String[] studentid);

	/**
	 * 
	 * Description: 根据学号取得学生记录
	 * 
	 * @Version1.0 Mar 24, 2009 10:34:30 PM 李萌（neolimeng@gmail.com）创建
	 * @param studentno
	 * @return
	 */
	public List<Student> getStudentByStudentNo(String studentno);

	/**
	 * 
	 * Description: 高级查询获得一个学会列表
	 * 
	 * @Version1.0 2009-3-27 下午10:44:51 李双江（paradise.lsj@gmail.com）创建
	 * @param searchstudentsql
	 * @return
	 */
	public List<Student> getStudentBySQLSearchConditions(String searchstudentsql);

	/**
	 * 
	 * Description: 获取所有的学院
	 * 
	 * @Version1.0 Mar 27, 2009 10:51:28 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @return
	 */
	public List<CollegeInfo> getAllcollegeInfo();

	/**
	 * 
	 * Description: 获取所有的专业
	 * 
	 * @Version1.0 Mar 27, 2009 10:52:15 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @return
	 */
	public List<MajorInfo> getAllMajorInfo();

	/**
	 * 
	 * Description: 根据学院id获取专业
	 * 
	 * @Version1.0 Mar 27, 2009 10:52:45 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param collegeid
	 * @return
	 */
	public List<MajorInfo> getMajorInfoByCollegeId(String collegeinfoid);

	/**
	 * 
	 * Description: 根据专业id获得学院
	 * 
	 * @Version1.0 Mar 27, 2009 10:53:45 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param majorid
	 * @return
	 */
	public List<CollegeInfo> getCollegeInfoByMajorId(String majorinfoid);

	/**
	 * 
	 * Description: 高级查询获得一个学生列表
	 * 
	 * @Version1.0 2009-3-27 下午10:44:51 李双江（paradise.lsj@gmail.com）创建
	 * @param searchstudentsql
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentBySQLSearchConditions(String searchstudentsql, int pageSize, int startRow);

	/**
	 * 
	 * Description:分页查询预标记的学生列表
	 * 
	 * @Version1.0 2009-4-5 上午01:53:01 李双江（paradise.lsj@gmail.com）创建
	 * @param studentpreallocationid
	 * @param pageSize
	 * @param startRow
	 * @return
	 */
	public List<Student> getStudentByStudentPreID(String studentpreallocationid, int pageSize, int startRow);

	/**
	 * 
	 * Description: 查询出预标记学生的总记录数
	 * 
	 * @Version1.0 2009-4-5 上午01:54:19 李双江（paradise.lsj@gmail.com）创建
	 * @param studentpreallocationid
	 * @return
	 */
	public int getStudentByStudentPreIDRows(String studentpreallocationid);

	/**
	 * 
	 * Description:返回高级查询学生总行数
	 * 
	 * @Version1.0 2009-3-28 下午01:17:01 李双江（paradise.lsj@gmail.com）创建
	 * @param searchstudentsql
	 * @return
	 */
	public int getStudentBySQLSearchConditionsRows(String searchstudentsql);

	/**
	 * 
	 * Description: 批量更新出查询学生的预分配id
	 * 
	 * @Version1.0 2009-3-29 下午08:02:39 李双江（paradise.lsj@gmail.com）创建
	 * @param studentid
	 * @return
	 */
	public String UpdateBatchStudentpreassignedID(String[] studentid,String studentpreassignid);

	/**
	 * 
	 * Description: 根据传入的sql更新所有高级查询出的学生的studentpreasignedid
	 * 
	 * @Version1.0 Mar 29, 2009 9:07:47 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param sql
	 * @return
	 */
	public int updateAllStudentPreasignedidAtService(String sql);

	/**
	 * 
	 * description: 返回查询学生的总行数
	 * 
	 * @Version1.0 2009-3-30 上午12:35:17 李双江（paradise.lsj@gmail.com）创建
	 * @return
	 */
	public int getAllStudentRows();

	/**
	 * 
	 * Description: 根据 StudentNo返回查询学生的总行数
	 * 
	 * @Version1.0 Apr 11, 2009 1:15:01 PM 李双江（paradise.lsj@gmail.com）创建
	 * @return
	 */
	public int getAllStudentRowsByStudentNo(String[] studentno);

	/**
	 * 
	 * Description: 根据 dormitoryid返回该宿舍的入住学生的列表信息
	 * 
	 * @Version1.0 2009-4-5 下午04:47:05 李双江（paradise.lsj@gmail.com）创建
	 * @param dormitoryid
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentInfoByDormitoryID(String dormitoryid);

	/**
	 * 
	 * Description:由姓名查询学生
	 * 
	 * @Version1.0 Apr 9, 2009 12:28:36 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param name
	 * @return
	 */
	public List<Student> searchStudentByStudentName(String name, int pageSize, int startRow) throws DaoException;

	/**
	 * 
	 * Description: 根据学号查询学生的基本信息（非全部信息，仅给非超级管理员看的信息）
	 * 
	 * @Version1.0 Apr 9, 2009 11:01:34 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param studentid
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentBasicInfo(String studentno,int studentdormitorytype);

	/**
	 * 
	 * Description: 为导出到Excel而准备的学生数据,不包含住宿信息
	 * 
	 * @Version1.0 Apr 14, 2009 11:07:51 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param stringOfStuIdArray页面上的被选中的学生的ID数组被转换后的字符串，形式如xxx,xxx,xxx,xxx……
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List studentInfoForExportToExcel(String stringOfStuIdArray);

	/**
	 * 
	 * Description: 为导出到Excel的学生数据,有住宿信息
	 * @Version1.0 Aug 22, 2009 5:22:27 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param stringOfStuIdArray
	 * @return
	 */
	public List studentInfoForExportToExcel2 (String stringOfStuIdArray);
	/**
	 * 
	 * Description: 查询学生的历史住宿信息
	 * 
	 * @Version1.0 Apr 17, 2009 3:22:32 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param studentno
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentHistoryAccomodationInfo(String studentno,int studentdormitorytype);

	/**
	 * Description: 根据修改前、修改后的入学年份来更新学生交费信息
	 * 
	 * @Version1.0 Apr 21th 2009 00:15:59 AM 闫克 （kurtyan777@gmail.com） 创建
	 * @param studentid
	 * @param preenrollyear
	 * @param postenrollyear
	 */
	public boolean updateStudentChargeInfo(String studentid, String preenrollyear, String postenrollyear);

	/**
	 * 
	 * Description: 通过模糊或不全的学号进行查询
	 * 
	 * @Version1.0 Apr 20, 2009 11:53:45 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param dimno
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List searchStudentByStudentDimNo(String dimno, int pageSize, int startRow);

	/**
	 * 
	 * Description: 高级查询页面全选所有查询到的学生
	 * 
	 * @Version1.0 Apr 21, 2009 4:12:19 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param searchstudentsql
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentBySQL(String searchstudentsql);
	/**
	 * 
	 * Description: 高级查询页面全选所有查询到的学生的姓名和电话
	 * 
	 * @Version1.0 Apr 21, 2009 4:12:19 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param searchstudentsql
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentTelBySQL(String searchstudentsql);

	/**
	 * 
	 * Description: 根据学号获得学生的交费记录
	 * 
	 * @Version1.0 Apr 22, 2009 12:57:02 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param studentno
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List getStudentChargeRecord(String studentno,int studentdormitorytype);

	/**
	 * 
	 * Description: 根据学号模糊查询学生得到的总行数
	 * 
	 * @Version1.0 Apr 23, 2009 1:55:38 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param dimno
	 * @return
	 */
	public int searchStudentByStudentDimNoTotalRows(String dimno);

	/**
	 * 
	 * Description: 根据姓名模糊查询到的学生的总行数
	 * 
	 * @Version1.0 Apr 23, 2009 2:06:45 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param studentname
	 * @return
	 */
	public int searchStudentByStudentNameTotalRows(String studentname);

	/**
	 * 
	 * Description: 根据某一条件查询某一个或某一批学生是否存在 ,返回人数(增加学生时验证输入的学号是否存在时用到)
	 * 
	 * @Version1.0 Apr 27, 2009 10:08:04 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param arg
	 * @param field
	 * @return
	 */
	public int isExistStu(String arg, String field);

	public String[][] getStudentIDListByStudentPreID(String studentpreallocationid);
	/**
	 * 
	 * Description:根据表名,字段名,值 判断是否存在
	 *	excel上传学生信息,查学院和专业代码(id)是否正确时用到
	 * @Version1.0 May 22, 2009 4:23:02 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param table
	 * @param field
	 * @param value
	 * @return
	 */
	public boolean isExist(String table,String field , String value);

	/**
	 * 
	 * Description: 编辑学生的备注，在学生基本信息页面用到
	 * @Version1.0 Jul 18, 2009 11:05:06 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param msc
	 * @param stuno
	 * @return
	 */
	public boolean editStuMsc(String msc,String stuno);
	/**
	 * 
	 * Description: 批量更新
	 * @Version1.0 Aug 25, 2009 3:25:34 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param list
	 * @return
	 */
	public List batchUpdate(List list);
	/**
	 * 
	 * Description: 批量导入学生的时候用到
	 * @Version1.0 Sep 19, 2009 1:18:27 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param name
	 * @return
	 */
	public int getCollegeIdByName(String name);
	/**
	 * 
	 * Description: 批量导入学生失败时用到
	 * @Version1.0 Sep 19, 2009 1:18:27 AM 郑旭（zhengxu2006@gmail.com）创建
	 * @param name
	 * @return
	 */
	public String getCollegeNameById(int id);
	/**
	 * 
	 * Description: 增加一个学院
	 * @Version1.0 Nov 1, 2009 4:08:09 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param collegename
	 * @return
	 */
	public boolean insertCollege(String collegename) ;
	/**
	 * 
	 * Description:根据学院Id删除一个学院 
	 * @Version1.0 Nov 1, 2009 4:08:22 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param collegeid
	 * @return
	 */
	public boolean deleteCollege(int collegeid) ;
	/**
	 * 
	 * Description: 根据id更新学院的学院名
	 * @Version1.0 Nov 1, 2009 4:09:21 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param collegeid
	 * @param collegename
	 * @return
	 */
	public int updateCollege(int collegeid,String collegename); 
	/**
	 * 
	 * Description: 增加一个专业
	 * @Version1.0 Nov 1, 2009 2:21:27 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param collegeid
	 * @param majorname
	 * @return
	 */
	public boolean insertMajor(int collegeid,String majorname);
	/**
	 * 
	 * Description: 删除一个专业
	 * @Version1.0 Nov 1, 2009 3:10:15 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param majorid
	 * @return
	 */
	public boolean deleteMajor(int majorid);
	/**
	 * 
	 * Description: 根据专业id修改专业名
	 * @Version1.0 Nov 1, 2009 3:46:18 PM 郑旭（zhengxu2006@gmail.com）创建
	 * @param majorid
	 * @param majorname
	 * @return
	 */
	public int updateMajor(int majorid,String majorname);
}
